#include "aip1637.h"

uint8_t NUM[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
uint8_t abc[]={0x00,0x00,0x00,0x00};

void ALIX_Delay_us(uint32_t nus)
{
	uint32_t temp;
	SysTick->LOAD=nus*fac_us;
	SysTick->VAL=0x00;
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
	SysTick->VAL =0X00;
}

void TMserialstart(void)
{
	HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
	HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_SET); // DIO = 1
	ALIX_Delay_us(2);
	HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_RESET); // DIO = 0
}

void TMserialstop(void)
{
	HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
	ALIX_Delay_us(2);
	HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_RESET); // DIO = 0
	ALIX_Delay_us(2);
	HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
	ALIX_Delay_us(2);
	HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_SET); // DIO = 1
}

void TMserialask(void)
{
	TM1637_DIO_IN();
	HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
	ALIX_Delay_us(5);
	while(HAL_GPIO_ReadPin(TM_DIO_GPIO_Port,TM_DIO_Pin));
	HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
	ALIX_Delay_us(2);
	HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
	TM1637_DIO_OUT();
}

void TMserialWrByte(uint8_t oneByte)
{
	uint8_t i;
	for(i=0;i<8;i++)
	{
		HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
		if(oneByte&0x01)
		{
			HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_SET); // DIO = 1
		}
		else
		{
			HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_RESET); // DIO = 0
		}
		ALIX_Delay_us(3);
		oneByte=oneByte>>1;
		HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
		ALIX_Delay_us(3);
	}
}
